﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20170122_Testwork1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Task1();
            //Task2();
            //Task3();
            //Task4();

            //ShowBorder(5,3,'*');

            //int[] array = RandArray(10);
            //ShowArrayToConsole(array);

            //OddEvenArray(10);
            MinMaxArrayTask(10);
        }

        //Пользователь вводит число с консоли.
        //Увеличить на 10 и вывести на экран
        static void Task1()
        {
            Console.WriteLine("Введите целое число");
            int number;
            bool isValidNumber = Int32.TryParse(Console.ReadLine(), out number);
            if (isValidNumber)
                Console.WriteLine(number + 10);
            else
                Console.WriteLine("Ввод некорректных данных");
        }

        //Найти сумму ряда чисел от 1 до n. n - целое положительное число вводиться пользователем в консоли.
        //Если n - не удовлетворяет условию - вывести сообщение об ошибке.
        static void Task2()
        {
            Console.WriteLine("Введите целое положительное число");
            int number;
            bool isValidNumber = Int32.TryParse(Console.ReadLine(), out number);
            if (isValidNumber && number > 0)
                Console.WriteLine("Сумма чисел от 1 до {0}: {1}", number, Sum(number));
            else
                Console.WriteLine("Ввод некорректных данных");
        }

        //Пользователь из консоли вводит координаты x и y двух точек. 
        //Найти расстояние по прямой между этими точками.
        static void Task3()
        {
            double x1, x2, y1, y2;
            Console.WriteLine("Введите х первой точки");
            x1 = Double.Parse(Console.ReadLine());
            Console.WriteLine("Введите y первой точки");
            y1 = Double.Parse(Console.ReadLine());
            Console.WriteLine("Введите х второй точки");
            x2 = Double.Parse(Console.ReadLine());
            Console.WriteLine("Введите y второй точки");
            y2 = Double.Parse(Console.ReadLine());
            double rez = Math.Pow((Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2)), 0.5);
            Console.WriteLine("Расстояние между точками ({0}  {1}) u ({2}  {3}) = {4}", x1, y1, x2, y2, rez);
        }

        //Пользователь из консоли вводит координаты x и y точки. 
        //Определить в какой четверти точка находится.
        //Обработать случай (0, 0)
        static void Task4()
        {
            double x, y;
            Console.WriteLine("Введите х");
            x = Double.Parse(Console.ReadLine());
            Console.WriteLine("Введите y");
            y = Double.Parse(Console.ReadLine());
            if (x == 0 && y == 0)
                Console.WriteLine("Точка ({0}  {1}) находится в начале координат", x, y);
            else if (x == 0 && y > 0)
                Console.WriteLine("Точка ({0}  {1}) находится на оси х между I и IV четвертями", x, y);
            else if (x == 0 && y < 0)
                Console.WriteLine("Точка ({0}  {1}) находится на оси х между II и III четвертями", x, y);
            else if (x > 0 && y == 0)
                Console.WriteLine("Точка ({0}  {1}) находится на оси y между I и II четвертями", x, y);
            else if (x < 0 && y == 0)
                Console.WriteLine("Точка ({0}  {1}) находится на оси y между III и IV четвертями", x, y);
            else if (x > 0 && y > 0)
                Console.WriteLine("Точка ({0}  {1}) находится в I четверти", x, y);
            else if (x < 0 && y > 0)
                Console.WriteLine("Точка ({0}  {1}) находится в II четверти", x, y);
            else if (x < 0 && y < 0)
                Console.WriteLine("Точка ({0}  {1}) находится в III четверти", x, y);
            else if (x > 0 && y < 0)
                Console.WriteLine("Точка ({0}  {1}) находится в IV четверти", x, y);
        }

        //Сделать метод, который рисует рамку из символов.
        //Размер рамки и символ, из которого состоит рамка - параметры метода
        static void ShowBorder(int height, int width, char symbol)
        {
            if (height < 3 || width < 3)
            {
                Console.WriteLine("Pазмер рамки меньше допустимого минимума 3*3");
                return;
            }
            for (int i = 0; i < width; i++)
                Console.Write(symbol);
            Console.WriteLine();
            for (int i = 0; i < height - 2; i++)
            {
                Console.Write(symbol);
                for (int j = 0; j < width - 2; j++)
                    Console.Write(' ');
                Console.WriteLine(symbol);
            }
            for (int i = 0; i < width; i++)
                Console.Write(symbol);
            Console.WriteLine();
        }

        //Написать метод, который возвращает массив, заполненный случайными числами 1-1000
        static int[] RandArray(int size)
        {
            int[] array = new int[size];
            Random r = new Random();
            for (int i = 0; i < size; i++)
                array[i] = r.Next(1, 1001);
            return array;
        }

        //Вывести элементы массива на экран.
        //Посчитать количество четных и нечетных элементов.
        static void OddEvenArray(int size)
        {
            int[] array = RandArray(size);
            ShowArrayToConsole(array);
            int evenCount = 0;
            foreach (var item in array)
            {
                if (item % 2 == 0)
                    evenCount++;
            }
            Console.WriteLine("Чётных элементов {0}, нечетных элементов {1}", evenCount, array.Length - evenCount);
        }


        //Вывести массив на экран, найти позицию первого вхождения минимального и максимального элемента,
        //а так же общее кол-во вхождений минимального и максимального элементов в массив
        static void MinMaxArrayTask(int size)
        {
            int[] array = RandArray(size);
            //int[] array = new int[] { 1, 2, 3, 1, 2, 3, 3, 2, 2, 3};
            ShowArrayToConsole(array);
            int min = array.Min();
            int max = array.Max();
            Console.WriteLine("Максимальный элемент {0}", max);
            Console.WriteLine("Номер первого вхождения максимального элемента {0}", Array.IndexOf(array, max) + 1);
            Console.WriteLine("Количество вхождений максимального элемента {0}", HowManyElementsInArray(array, max));
            Console.WriteLine("Минимальный элемент {0}", min);
            Console.WriteLine("Номер первого вхождения минимального элемента {0}", Array.IndexOf(array, min) + 1);
            Console.WriteLine("Количество вхождений минимального элемента {0}", HowManyElementsInArray(array, min));
        }

        static int Sum(int number)
        {
            int sum = 0;
            for (int i = 1; i <= number; i++)
                sum += i;
            return sum;
        }

        static void ShowArrayToConsole(int[] array)
        {
            foreach (var item in array)
            {
                Console.Write("{0} ", item);
            }
            Console.WriteLine();
        }

        static int HowManyElementsInArray (int[] array, int element)
        {
            int res = 0;
            foreach (var item in array)
            {
                if (item == element)
                    res++;
            }
            return res;
        }
    }
}
